#!/usr/bin/env python
# encoding: utf-8
'''
@author: KM
@license: (C) Copyright 2013-2017, Node Supply Chain Manager Corporation Limited.
@contact: yangkm601@gmail.com
@software: garner
@time: 2019/9/25
@url：https://leetcode-cn.com/problems/string-to-integer-atoi/
@desc:
    
    8. 字符串转换整数 (atoi)

    请你来实现一个 atoi 函数，使其能将字符串转换成整数。
    首先，该函数会根据需要丢弃无用的开头空格字符，直到寻找到第一个非空格的字符为止。
    当我们寻找到的第一个非空字符为正或者负号时，则将该符号与之后面尽可能多的连续数字组合起来，作为该整数的正负号；假如第一个非空字符是数字，则直接将其与之后连续的数字字符组合起来，形成整数。
    该字符串除了有效的整数部分之后也可能会存在多余的字符，这些字符可以被忽略，它们对于函数不应该造成影响。

    注意：假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时，则你的函数不需要进行转换。
    在任何情况下，若函数不能进行有效的转换时，请返回 0。

    说明：
    假设我们的环境只能存储 32 位大小的有符号整数，那么其数值范围为 [−231,  231 − 1]。如果数值超过这个范围，请返回  INT_MAX (231 − 1) 或 INT_MIN (−231) 。

    示例 1:
        输入: "42"
        输出: 42

    示例 2:
        输入: "   -42"
        输出: -42
        解释: 第一个非空白字符为 '-', 它是一个负号。
             我们尽可能将负号与后面所有连续出现的数字组合起来，最后得到 -42 。
    示例 3:
        输入: "4193 with words"
        输出: 4193
        解释: 转换截止于数字 '3' ，因为它的下一个字符不为数字。
    示例 4:
        输入: "words and 987"
        输出: 0
        解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
            因此无法执行有效的转换。
    示例 5:
        输入: "-91283472332"
        输出: -2147483648
        解释: 数字 "-91283472332" 超过 32 位有符号整数范围。 
         因此返回 INT_MIN (−231) 。

'''
import math
class Solution:
  def myAtoi(self, str):
        """
        :type str: str
        :rtype: int
        """
        #去掉左边字符
        str=str.lstrip()
        #如果字符串空，返回
        if len(str)==0:
            return 0
        #设置默认输出为0
        last=0
        #如果有符号设置起始位置2，其余的为1
        i=2 if str[0]=='-'or str[0]=='+'  else 1
        #循环，直到无法强转成int，跳出循环
        while i <= len(str):
            try:
                last=int(str[:i])
                i+=1
            except:
                break
        #如果数字超出范围，返回范围最大值
        if last<-2147483648 :
            return -2147483648
        if last>2147483647:
            return 2147483647
        return last

            

if __name__ == "__main__":

    solution = Solution()

    print("--------1-------")
    nums = "-42"
    res=solution.myAtoi(nums)
    print("res:{0}".format(res))

    print("--------2-------")
    nums = "4193 with words"
    res=solution.myAtoi(nums)
    print("res:{0}".format(res))

    print("--------3-------")
    nums = "words and 987"
    res=solution.myAtoi(nums)
    print("res:{0}".format(res))

    print("--------4-------")
    nums = "-91283472332"
    res=solution.myAtoi(nums)
    print("res:{0}".format(res))

    print("--------5-------")
    nums = "3.14159"
    res=solution.myAtoi(nums)
    print("res:{0}".format(res))

    print("-------6--------")
    nums = "+1"
    res=solution.myAtoi(nums)
    print("res:{0}".format(res))

    print("-------7--------")
    nums = "+-1"
    res=solution.myAtoi(nums)
    print("res:{0}".format(res))

    